兼容笔式体温计状态管理

FFIB 2 年之前
父节点
当前提交
671ff4a407
共有 4 个文件被更改,包括 125 次插入11 次删除
  1. 23 0
      account/migrations/0009_auto_20220707_1801.py
  2. 41 6
      api/eqpt_views.py
  3. 48 0
      equipment/migrations/0027_auto_20220707_1801.py
  4. 13 5
      equipment/models.py

+ 23 - 0
account/migrations/0009_auto_20220707_1801.py

@@ -0,0 +1,23 @@
1
+# Generated by Django 3.2.9 on 2022-07-07 10:01
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('account', '0008_auto_20220606_1536'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AlterField(
14
+            model_name='administratorinfo',
15
+            name='status',
16
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
17
+        ),
18
+        migrations.AlterField(
19
+            model_name='userinfo',
20
+            name='status',
21
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
22
+        ),
23
+    ]

+ 41 - 6
api/eqpt_views.py

@@ -197,6 +197,47 @@ def get_screen_data(point=None, point_id=None):
197 197
     ipuis = [{**ipui.data, **{
198 198
         field.get('key', ''): protect_user_privacy(field) for field in ipui.fields }} for ipui in ipuis]
199 199
 
200
+    reminds = [{
201
+        'name': ipui.get('name'),
202
+        'room': ipui.get('room'),
203
+        'content': ipui.get('remark'),
204
+    } for ipui in ipuis if ipui.get('remark')]
205
+
206
+    if point.temperature_measure_type == IsolationPointInfo.SINGLE:
207
+        start_dt, end_dt = point.match_upload_period
208
+
209
+        ipuis_has_upload = []
210
+        ipuis_fever = []
211
+        ipuis_not_upload = []
212
+        ipuis_unused = []
213
+
214
+        for ipui in ipuis:
215
+            temperature = ipui.get('temperature', 0.0)
216
+            last_submit_at = ipui.get('last_submit_at', '')
217
+            if not last_submit_at:
218
+                ipuis_unused.append(ipui)
219
+                continue
220
+                
221
+            last_submit_at = tc.make_naive(last_submit_at)
222
+
223
+            if (start_dt < last_submit_at < end_dt) and temperature > settings.FEVER_TEMPERATURE:
224
+                ipuis_fever.append(ipui)
225
+            elif (start_dt < last_submit_at < end_dt) and (0.0 < temperature <= settings.FEVER_TEMPERATURE):
226
+                ipuis_has_upload.append(ipui)
227
+            else:
228
+                ipuis_not_upload.append(ipui)
229
+        
230
+        return {
231
+            'eqpts': ipuis_fever + ipuis_unused + ipuis_not_upload + ipuis_has_upload,
232
+            'reminds': reminds,
233
+            'total_active_eqpt_num': total_active_eqpt_num,
234
+            'has_upload_temperature_num': len(ipuis_has_upload) + len(ipuis_fever),
235
+            'not_upload_temperature_num': len(ipuis_unused) + len(ipuis_not_upload),
236
+            'normal_num': len(ipuis_has_upload),
237
+            'fever_num': len(ipuis_fever),
238
+            'update_time': tc.local_string(),
239
+        }
240
+
200 241
     
201 242
     has_upload_temperature_num = len([1 for ipui in ipuis if ipui.get('temperature_has_upload', '') == IsolationPointUserInfo.HAS_YET_UPLOAD])
202 243
     fever_num = len([1 for ipui in ipuis if ipui.get('temperature', 0) > settings.FEVER_TEMPERATURE and ipui.get('temperature_has_upload') == IsolationPointUserInfo.HAS_YET_UPLOAD])
@@ -222,12 +263,6 @@ def get_screen_data(point=None, point_id=None):
222 263
     #     field.get('key', ''): field.get('value', '') for field in ipuis.get(eqpt.ipui_pk, {}).get('fields', [])
223 264
     # }} for eqpt in eqpts]
224 265
 
225
-    reminds = [{
226
-        'name': eqpt.get('name'),
227
-        'room': eqpt.get('room'),
228
-        'content': eqpt.get('remark'),
229
-    } for eqpt in eqpts if eqpt.get('remark')]
230
-
231 266
     # eqpts = [{
232 267
     #     'name': eqpt.get('name', ''),
233 268
     #     'room': eqpt.get('room', ''),

+ 48 - 0
equipment/migrations/0027_auto_20220707_1801.py

@@ -0,0 +1,48 @@
1
+# Generated by Django 3.2.9 on 2022-07-07 10:01
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('equipment', '0026_auto_20220606_1536'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AddField(
14
+            model_name='isolationpointinfo',
15
+            name='temperature_measure_type',
16
+            field=models.IntegerField(choices=[(0, '连续型'), (1, '单次')], default=1, help_text='测温类型', verbose_name='temperature_measure_type'),
17
+        ),
18
+        migrations.AlterField(
19
+            model_name='aepthermometermeasureloginfo',
20
+            name='status',
21
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
22
+        ),
23
+        migrations.AlterField(
24
+            model_name='isolationpointfieldpoolinfo',
25
+            name='status',
26
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
27
+        ),
28
+        migrations.AlterField(
29
+            model_name='isolationpointinfo',
30
+            name='status',
31
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
32
+        ),
33
+        migrations.AlterField(
34
+            model_name='isolationpointuserinfo',
35
+            name='status',
36
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
37
+        ),
38
+        migrations.AlterField(
39
+            model_name='thermometerequipmentinfo',
40
+            name='status',
41
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
42
+        ),
43
+        migrations.AlterField(
44
+            model_name='thermometermeasureloginfo',
45
+            name='status',
46
+            field=models.BooleanField(default=True, help_text='Status', verbose_name='status'),
47
+        ),
48
+    ]

+ 13 - 5
equipment/models.py

@@ -49,6 +49,14 @@ class IsolationPointFieldPoolInfo(BaseModelMixin):
49 49
 
50 50
 
51 51
 class IsolationPointInfo(BaseModelMixin):
52
+    CONTINUOUS = 0
53
+    SINGLE = 1
54
+
55
+    TEMPERATURE_MEASURE_TYPE_TUPLE = (
56
+        (CONTINUOUS, '连续型'),
57
+        (SINGLE, '单次')
58
+    )
59
+
52 60
     point_id = ShortUUIDField(_('point_id'), max_length=32, blank=True, null=True, help_text='隔离点唯一标识', db_index=True, unique=True)
53 61
     point_name = models.CharField(_('point_name'), max_length=255, blank=True, null=True, help_text='隔离点名称')
54 62
 
@@ -69,6 +77,7 @@ class IsolationPointInfo(BaseModelMixin):
69 77
     #     }
70 78
     # ]
71 79
     point_upload_period = JSONField(_('point_upload_period'), default=[], blank=True, null=True, help_text='隔离点上传时段')
80
+    temperature_measure_type = models.IntegerField(_('temperature_measure_type'), choices=TEMPERATURE_MEASURE_TYPE_TUPLE, default=SINGLE, help_text='测温类型')
72 81
 
73 82
     limit_scene_qrcode_url = models.CharField(_('limit_scene_qrcode_url'), max_length=255, blank=True, null=True, help_text='字段二维码')
74 83
 
@@ -81,15 +90,13 @@ class IsolationPointInfo(BaseModelMixin):
81 90
 
82 91
     @property
83 92
     def match_upload_period(self):
84
-        if not self.point_upload_period:
85
-            return True
86 93
         for period in self.point_upload_period:
87 94
             local_date_string = tc.local_date_string()
88 95
             start_dt = tc.string_to_datetime(f'{local_date_string} {period["start"]}', format='%Y-%m-%d %H:%M')
89 96
             end_dt = tc.string_to_datetime(f'{local_date_string} {period["end"]}', format='%Y-%m-%d %H:%M')
90
-            current_dt = tc.make_naive(tc.local_datetime())
91
-            if start_dt < current_dt < end_dt:
92
-                return True
97
+            current_at = tc.make_naive(tc.local_datetime())
98
+            if start_dt < current_at < end_dt:
99
+                return start_dt, end_dt
93 100
         return False
94 101
 
95 102
     @property
@@ -174,6 +181,7 @@ class IsolationPointUserInfo(BaseModelMixin):
174 181
             'temperature_has_upload': self.temperature_has_upload,
175 182
             'user_status': self.user_status,
176 183
             'temperature': self.temperature,
184
+            'last_submit_at': self.last_submit_at,
177 185
             'last_report_time': tc.local_string(utc_dt=self.last_submit_at, format='%m-%d %H:%M') if self.last_submit_at else '',
178 186
             'remark': self.remark or '',
179 187
         }